#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int A[N],a[N],p[5],c[N],n,m,K,ans[N];
char d[N][N];
int lg2[N];
struct node {
    int mn,mx,sum,w;
};
queue<node> q;

int solve(int x) {
    if(x==1) return 1;
    int k=(lg2[x]==lg2[x-1]?lg2[x]+1:lg2[x]);
    while(!q.empty()) q.pop();
    for(int i=1; i<=x; i++) q.push({i,i,i,a[i]});
    for(int i=x+1; i<=(1<<k); i++) q.push({i,i,i,-1});
    //cout << "Start\n";
    for(int i=K-k+1; i<=K; i++) {
        for(int j=1; j<=(1<<K-i); j++) {
            auto a=q.front(); q.pop();
            auto b=q.front(); q.pop();
            //cout << a.w << ' ' << b.w << ' ';
            if(a.w!=-1 && b.w!=-1) {
                if(d[i][j]=='0') {
                    if(a.w>=i-K+k) q.push(a);
                    else q.push(b);
                }else {
                    if(b.w>=i-K+k) q.push(b);
                    else q.push(a);
                }
            }
            else if(b.w==-1) {
                if(d[i][j]=='0') {
                    if(a.w>=i-K+k) q.push(a);
                    else q.push(b);
                } else {
                    q.push({a.mn,b.mx,a.sum+b.sum,-1});
                }
            }
            else q.push({a.mn,b.mx,a.sum+b.sum,-1});
        }
        //cout << '\n';
    }
    //cout << q.front().mn << ' ' << q.front().mx << ' ' << q.front().sum << '\n';
    return q.front().sum;
}
int main() {
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    cin >> n >> m;
    for(int i=1; i<=n; i++) cin >> A[i];
    for(int i=1; i<=m; i++) cin >> c[i];
    lg2[1]=0;
    for(int i=2; i<N; i++) {
        lg2[i]=lg2[i/2]+1;
    }
    if(lg2[n]!=lg2[n-1]) K=lg2[n];
    else K=lg2[n]+1;
    for(int i=1; i<=K; i++) {
        for(int j=1; j<=(1<<K-i); j++) {
            cin >> d[i][j];
        }
    }
    int t; cin >> t;
    while(t--) {
        for(int i=0; i<4; i++) cin >> p[i];
        for(int i=1; i<=n; i++) a[i]=(A[i]^p[i%4]);
        for(int i=1; i<=n; i++) {
            ans[i]=solve(i);
        }
        int aans=0;
        for(int i=1; i<=m; i++) {
            aans^=(i*ans[c[i]]);
        }
        cout << aans << '\n';
    }
    return 0;
}
